// pages/cuesAdmin/index.ts
import {fontSizeCalc, getCountInfo, handleErrCode, isWXMP, silentLogin} from "../../utils/util";
import {getCuesTopicPage} from "../../service/api/api-cues-topic";

let toast;
Page({

    /**
     * 页面的初始数据
     */
    data: {
        searchText: "",// 搜索关键字
        currentTab: 0, // 当前选中的tab
        scrollTop: 0, // 滚动到顶部
        tabs: [
            {name: "进行中"},
            {name: "已结束"},
        ],// 筛选条件
        planList: [],// 计划列表
        backPlanList: [],// 计划列表，本地过滤用
        access: {} as any,// 当前用户权限
        currentUser: {},// 当前用户信息
        options: '',
        showAdd: false,// 是否能看见新增
        showReportInfo: false,// 是否能看上报单位
        isAdmin: false,// 是否是管理员
        isAddBack: false,// 是否新增的时候返回
        clickLock: false,// 点击的锁
        triggered: false,// 自定义下拉是否被触发 true 表示下拉刷新已经被触发，false 表示下拉刷新未被触发
        isWxmp: false,// 当前是否从公众号模板跳转过来的
        searchTimeout: null,
        current: 1,// 第几页
        pageSize: 20,// 每页多少条数据
        total: 0,// 总共有多少条

        iconSize: fontSizeCalc(40),
        tabFontSize: fontSizeCalc(28),
        labelSize: fontSizeCalc(32),
        inputSize: fontSizeCalc(32),
        btnHeight: fontSizeCalc(96) + 'rpx',
        btnLineHeight: fontSizeCalc(70) + 'rpx',
        fabWidth: fontSizeCalc(108),
        fabHeight: fontSizeCalc(108),
        fabRight: fontSizeCalc(80),
        fabBottom: fontSizeCalc(100),
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        const isWxmp = isWXMP(options)
        this.setData({
            isWxmp,
            options: JSON.stringify(options)
        })
        if (isWxmp){// 代表从公众号通知模板进来的，要去静默登录一下，登录有结果之后要记得赋值
            silentLogin(()=>{
                getCountInfo(this);
                this.checkUserAction();
                this.searchFun({});
            });
        } else {
            getCountInfo(this);
            this.checkUserAction();
        }
    },
    /**
     * 开始搜索
     * @param detail
     * @param current 分页数据，
     */
    async searchFun({detail = {value: ''},current = 1}) {
        // 有传值的时候才把这个值设置进去
        let _that = this;
        let {pageSize,currentTab} = this.data;
        // if (_that.isEnd()){
        //     return
        // }
        _that.setData({
            current: current,
            searchText: detail.value
        })
        wx.showLoading({
            title: '搜索中...'
        })
        // 执行搜索函数
        await getCuesTopicPage({
            current,
            pageSize,
            name: detail.value,
            run: currentTab + 1,
        }).then(async (response) => {
            _that.handleListData(response)
        }).catch(error => {
            console.warn(error)
            handleErrCode(error, 'none')
        }).finally(() => {
            // 标题栏隐藏刷新转圈圈图标
            _that.searchFinally()
        })
    },
    /**
     * 搜索取消
     */
    searchCancel() {
        console.log('chCancel');
        this.setData({
            searchText: ""
        })
        this.searchFun({})
    },
    /**
     * 切换tab
     * @param detail
     */
    tabsChange({detail = {index: 0}}) {
        this.setData({
            currentTab: detail.index,
            scrollTop: 0,
            current: 1,
            total: 0,
            searchText: ""
        })
        this.searchFun({});// 开始搜索

        // 先做本地过滤
        // let currentTab = detail.index;
        // let {backPlanList} = this.data;
        // this.setData({
        //     planList: backPlanList.filter(item =>{
        //         if (detail.index === 0){// 进行中
        //             return item.run === 1;
        //         } else {
        //             return item.run !== 1; // 已结束
        //         }
        //     }),
        //     currentTab,
        //     scrollTop: 0
        // })
    },

    /**
     * 处理返回的列表值
     * @param res
     */
    handleListData(res: Object) {
        let dataList = [], total = this.data.total;
        if (res?.code === 0 && res?.data?.data) {
            const newData = res.data.data || [];
            dataList = Array.isArray(newData) && newData.map((item, index) => {
                const {typeName, bgColor} = this.handlePlanType(item)
                return {
                    ...item,
                    bgColor,
                    typeName
                }
            }) || []
            total = res.data.total || 0
        } else {
            handleErrCode(res)
        }
        const oldList = this.data.planList
        if (this.data.current > 1){// 上拉加载更多
            dataList = [...oldList, ...dataList]
        }
        this.setData({
            planList: dataList,
            total
            // backPlanList: dataList
        })
        // 主动触发一次
        // this.tabsChange({detail: {index: this.data.currentTab}})
    },

    /**
     * 处理一下计划状态
     * @param data
     */
    handlePlanType({run}) {
        return {
            typeName: run === 1 ? '进行中' : '已结束',
            bgColor: run === 1 ? '#389E0D' : '#E75D58',
        }
    },
    /**
     * 跳转到详情
     */
    gotoDetail(e: any) {
        const plan = e.currentTarget.dataset.item || {};
        wx.navigateTo({
            url: `/pages/cuesDetail/index?id=${plan.id}`,
        })
    },

    /**
     * 添加界面
     */
    addPlan() {
        if (this.data.clickLock){
            return
        }
        this.setData({
            clickLock: true
        })
        let _that = this;
        wx.navigateTo({
            url: '/pages/cuesAdminAdd/index',
            success: function (res) {
                _that.setData({
                    clickLock: false
                })
            }
        })
    },

    /**
     * 提示语
     */
    showToast(title){
        let params = {
            title,
        }
        toast && toast.show(params);
    },

    /**
     * 是否到底的判断
     */
    isEnd(){
        let {current,pageSize,total} = this.data;
        if (total && current !== 1 && current * pageSize >= total){
            this.showToast('已经到底了')
            return true
        } else {
            return false
        }
    },


    /**
     * 显示用户操作按钮等
     */
    checkUserAction(){
        const isAdmin = this.data.access.线索上报x选题计划x配置x管理员;
        let tabs = this.data.tabs;
        if (isAdmin){
            tabs.splice(2,1);// 删掉最后一个已结束
        }
        this.setData({
            showAdd: this.data.access.线索上报x选题计划x配置x需求者 && this.data.access.线索上报x选题计划x计划列表x创建计划,
            showReportInfo: isAdmin || this.data.access.线索上报x选题计划x配置x需求者,
            isAdmin,
            tabs,
        })
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {
        toast = this.selectComponent("#toast")
    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {
        !this.data.isWxmp && this.tabsChange({detail: {index: this.data.currentTab}});// 没有token采取获取
        wx.hideShareMenu({
            menus: ['shareAppMessage', 'shareTimeline'],// 隐藏分享到朋友和分享到朋友圈
        })
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {
        // wx.reLaunch({
        //     url:'/pages/home/index'
        // })
    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * scroll-view 下拉刷新
     */
    refresherPulling(){
        this.setData({
            triggered: true
        })
    },

    /**
     * 刷新函数
     */
    refreshFun(e:object, current = 1){
        // 标题栏显示刷新图标，转圈圈
        wx.showNavigationBarLoading()

        this.searchFun({current});
        clearTimeout(this.data.searchTimeout);
        let searchTimeout = setTimeout(() => {
            this.searchFinally()
        }, 2000);
        this.setData({
            searchTimeout,
        })
    },

    /**
     * 下拉加载更多数据函数
     */
    scrollToLowerFun(){
        if (this.isEnd()){
            return
        }
        // 调用刷新函数
        this.refreshFun({},this.data.current + 1)
    },

    /**
     * 搜索最终
     */
    searchFinally(){
        clearTimeout(this.data.searchTimeout)
        // 标题栏隐藏刷新转圈圈图标
        wx.hideNavigationBarLoading();
        wx.stopPullDownRefresh();
        wx.hideLoading();
        this.setData({
            triggered: false
        })
    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    taskExecuteShareFun() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {
    }
})